package com.travel.utils;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpSession;

import org.apache.commons.io.FilenameUtils;
import org.springframework.web.multipart.MultipartFile;

public class UploadFiles {

	/**
	 * 
	 * @param attachs 多文件上传的源文
	 * @param path  设定的在statics基础上的自定义路径
	 * @return 返回文件的信息集合
	 */
	public static List UploadPics(MultipartFile[] attachs,String path,HttpSession session){
		// 文件在服务器端储存的真实路径
		String serverPath=session.getServletContext().getRealPath("statics"+File.separator+"images"+File.separator+path);
		serverPath="C:\\Users\\zh\\git\\tourism\\src\\main\\webapp\\statics\\images"+File.separator+path;
		// 在数据库中应该储存的路径
		String sqlPath="images"+File.separator+path+File.separator;
		
		//存储多文件中每个文件的 文件名 和文件路径
		List fileslist=new ArrayList();
	
	/**
	 * 遍历多文件开始储存
	 */
	for(int i=0;i<attachs.length;i++){
			//存储单个文件的信息
			Map fileMap=new HashMap();
			//上传失败原因
			String errorInfo=null;
			//上传是否成功
			boolean flag=true;
			if(!attachs[i].isEmpty()){
				//判断文件上传为什么文件
				//设置文件上传大小
				Integer  filesize=500000;
				//获取源文件的源文件名
				String oldfilename=attachs[i].getOriginalFilename();
				//获取源文件的后缀
				String prefix=FilenameUtils.getExtension(oldfilename).toLowerCase();
				//创建文件后缀符合格式的集合
				String[] prefixs=new String[]{"jpg","png","jpeg","pneg"}; 
				//把文件的后缀转为list集合进行判断
				List<String> listp=Arrays.asList(prefixs);
				//判断文件上传大小是否正确
				if(attachs[i].getSize()>filesize){
					errorInfo= "* 上传大小不得超过 500k";
					flag=false;
				}else if(!listp.contains(prefix)){
					errorInfo="* 文件上传格式不正确！";
					flag=false;
				}else{
					String fileName = System.currentTimeMillis()+"_dingjia."+prefix;  
	                File targetFile = new File(serverPath, fileName); 
	                //如果文件路径不存在就创建
	                if(!targetFile.exists()){  
	                    targetFile.mkdirs();  
	                }  
	                //开始文件上传
	                try {
						attachs[i].transferTo(targetFile);
						System.out.println("开始写入！");
					} catch (IllegalStateException|IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
						 errorInfo=" * 服务器原因导致上传失败！";
		                 flag = false;
					} 
	               //保存在数据库中文件路径
	                fileMap.put("errorInfo", errorInfo);
	                fileMap.put("flag", flag);
	                fileMap.put("fileName", oldfilename);
	                fileMap.put("sqlPath", sqlPath+fileName);
	                
				}
			}
			//单个文件上传结束
			fileslist.add(fileMap);
		}
		
		return fileslist;
	}
}
